#include  "App_Common.h"

/**
 * @brief 获取当前时间
 * 
 * @return long 返回当前时间辍
 */
long App_Common_GetCurrentTime(void)
{
    struct timeval tv;
    // 获取当前时间
    gettimeofday(&tv, NULL);

    return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

/**
 * @brief 字符数组转十六进制字符串数组
 * 
 * @param str 字符数组
 * @param len 字符数组长度
 * @return char* 返回十六进制字符串数组
 */
char *App_Common_StrToHexStr(char *str, int len)
{
    // 申请内存空间
    char *hexstr = (char *)malloc(len * 2 + 1);
    // 遍历字符数组，将其中的每个字符转换为16进制字符，并存入hexstr中
    for (int i = 0; i < len; i++)
    {
        sprintf(hexstr + i * 2, "%02X", str[i]);
    }
    // 添加字符串结束符
    hexstr[len * 2] = '\0';

    return hexstr;
}

/**
 * @brief 十六进制字符串数组转字符数组
 * 
 * @param hexstr 十六进制字符串数组
 * @param len 接受字符数组的长度指针
 * @return char* 返回的字符数组
 */
char *App_Common_HexStrToStr(char *hexstr, int *len)
{
int hexstr_len = strlen(hexstr);
    
    // 保存字符数组的长度
    *len = hexstr_len/2;

    // 申请内存
    char *chars = malloc(*len);

    // 遍历hexstr中的每个字符(以2个为单位)，得到对应的字符，并保存到chars中
    for(int i=0; i<hexstr_len; i+=2) {
        sscanf(hexstr+i, "%2x", (unsigned int *)(chars+i/2));
    }

    return chars;
}
